public class Offer_15 {
//    剑指 Offer 15. 二进制中1的个数

    /**
     * 请实现一个函数，输入一个整数（以二进制串形式），输出该数二进制表示中 1 的个数。例如，把 9表示成二进制是 1001，有 2 位是 1。因此，如果输入 9，则该函数输出 2。
     * <p>
     * 输入：00000000000000000000000000001011
     * 输出：3
     * 解释：输入的二进制串 00000000000000000000000000001011中，共有三位为 '1'。
     *
     * @param n
     * @return
     */
    // you need to treat n as an unsigned value
    public static int hammingWeight(int n) {
        int res = 0;
        while (n != 0) {
            res += n & 1;  // 利用n & 1 = 0n&1=0 ，则 n 二进制 最右一位 为 0
            n >>>= 1;      //若   n & 1 = 1n&1=1 ，则 n 二进制 最右一位 为 1
        }
        return res;
    }

    public static void main(String[] args) {
        System.out.println(hammingWeight(00000000000000000000000000001011));
    }
}
